template<class T>
class Node
{
    bool destroyed_;
    Node* left_;
    Node* right_;
    Node* parent_;
    T value_;

    public:

    bool isTerminal();
    bool isRoot ();

    Node* getLeftChild();
    Node* getRightChild();

    Node* getRoot   ();
    Node* getParent ();

    bool ok ();

    bool attatchToLeft  (Node* attachment);
    bool attatchToRight (Node* attachment);

    T* getValue ();

    Node ();
    Node (T);

    ~Node ();
};
